/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package controller;

import java.util.ArrayList;
import model.Kante;
import model.Tabelle;
import model.TabellenEintrag;

/**
 *
 * @author Max
 */
public class ErstellerInteraktiv {
    
    private Tabelle tabelle;
    
    private int index;
    
    private ArrayList<String> titelListe = new ArrayList<String>();
    
    public ErstellerInteraktiv(Tabelle tabelle, int index) {
        this.tabelle = tabelle;
        this.index = index;
    }
    
    public ArrayList<Tabelle> berechneTabelle(){
        EntropieRechner entropieRechner = new EntropieRechner(tabelle.getSpaltenListe().get(index), tabelle.getSpaltenListe().get(tabelle.getSpaltenListe().size()-1));
        tabelle.getSpaltenListe().get(index).setEntropie(entropieRechner.calcEntropie());
        return calcTabellen(tabelle.getSpaltenListe().get(index).getSpaltenElemente(), index);
    }
    
    private ArrayList<Tabelle> calcTabellen(ArrayList<String> spaltenElemente, int index) {
        // Spätere TabellenListe
        ArrayList<Tabelle> tabellenListe = new ArrayList<>();
        // Um die richtige Position zum Einsetzen der Labels zu finden
        // durchlaufe die Kantenliste
        int kantenIndex = 0;
        /*for (int i = 0; i < kantenListe.size(); i++) {
                if (kantenListe.get(i).getStartKnoten() == null) {
                    kantenIndex = i;
                    break;
                }
        } */
        // Durchlaufe die Liste der Spalten-Elemente
        for (int i = 0; i < spaltenElemente.size(); i++) {
            // Erstelle neue Liste aus TabellenEintraegen
            ArrayList<TabellenEintrag> tabellenEintraege = new ArrayList<>();
            // Guck in welcher Zeile das Spalten Element vorkommt
            String spaltenElement = spaltenElemente.get(i);
            titelListe.add(spaltenElement);
            // Durchlaufe die Tabellen-Spalte
            for (int j = 0; j < tabelle.getSpaltenListe().get(index).getDaten().length; j++) {              
                if (spaltenElemente.get(i).equals(tabelle.getSpaltenListe().get(index).getDaten()[j]) || j == 0) {
                    // Wenn das Element gleich oder es die 0. Zeile (Spaltennamen) ist, dann erstelle aus der Zeile
                    // ein String Array
                    String[] eintraege = new String[(tabelle.getListe().get(j).getEintrage().length - 1)];
                    int stringIndex=0;
                    for (int l = 0; l < tabelle.getListe().get(j).getEintrage().length; l++) {
                        // Wenn der Index gleich der Position des schon vorhandenen
                        // Elementes ist, dann füge ihn nicht hinzu
                        if (l != index) {                           
                            eintraege[stringIndex] = tabelle.getListe().get(j).getEintrage()[l];
                            stringIndex++;
                        }
                    }
                    // Erstelle aus diesem Array einen neuen TabellenEintrag
                    TabellenEintrag eintrag = new TabellenEintrag(eintraege);
                    // Adde diesen Eintrag dann zur Eintragsliste                    
                    tabellenEintraege.add(eintrag);
                }               
            }
            /*
            if (kantenIndex != 0) {
                kantenListe.add(kantenIndex+i, new Kante(null, null, spaltenElement));
            }
            else {
            // Erstelle eine "leere" aber gelabelte Kante
            kantenListe.add(new Kante(null, null, spaltenElement));
            } */
            // Erstelle aus diesen Eintraegen dann eine neue Tabelle
            Tabelle tabelleNeu = new Tabelle(tabellenEintraege);
            // Füge diese Tabelle dann der Liste hinzu
            tabellenListe.add(tabelleNeu);
        }
        return tabellenListe;
    }

    /**
     * @return the titelListe
     */
    public ArrayList<String> getTitelListe() {
        return titelListe;
    }
}
